home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / bin / fakeroot-sysv < prev    next >
Text File  |  2009-06-24  |  4KB  |  185 lines

  1. #!/bin/bash
  2.  
  3. # This script first starts faked (the daemon), and then it will run
  4. # the requested program with fake root privileges.
  5.  
  6. usage () {
  7. cat - >&2 <<EOF
  8. fakeroot, create a fake root environment.
  9.    usage: fakeroot [-l|--lib fakerootlib] [-f|--faked fakedbin]
  10.                    [-i file] [-s file] [-u|--unknown-is-real]
  11.            [-b|--fd-base fd] [-h|--help] [-v|--version]
  12.                    [--] [command]
  13. EOF
  14.   exit 1
  15. }
  16.  
  17. stderr ()
  18. {
  19.   local i
  20.   for i
  21.   do
  22.       echo >&2 "fakeroot: $i"
  23.   done
  24. }
  25.  
  26. fatal ()
  27. {
  28.   stderr "$@"
  29.   exit 1
  30. }
  31.  
  32. # strip /bin/fakeroot to find install prefix
  33. PREFIX=/usr
  34. BINDIR=/usr/bin
  35.  
  36. USEABSLIBPATH=0
  37. LIB=libfakeroot-sysv.so
  38. PATHS=/usr/lib/libfakeroot:${PREFIX}/lib64/libfakeroot:${PREFIX}/lib32/libfakeroot
  39. FAKED=${BINDIR}/faked-sysv
  40.  
  41. FAKED_MODE="unknown-is-root"
  42. export FAKED_MODE
  43.  
  44. libfound=no
  45.  
  46. GETOPTEST=`getopt --version`
  47. case $GETOPTEST in
  48. getopt*) # GNU getopt
  49.     TEMP=`getopt -l lib: -l faked: -l unknown-is-real -l fd-base: -l version -l help -- +l:f:i:s:ub:vh "$@"`
  50.     ;;
  51. *) # POSIX getopt ?
  52.     TEMP=`getopt l:f:i:s:ub:vh "$@"`
  53.     ;;
  54. esac
  55.  
  56. if test "$?" -ne 0; then
  57.   usage
  58. fi
  59.  
  60. eval set -- "$TEMP"
  61.  
  62. FAKEDOPTS=""
  63. PIPEIN=""
  64. WAITINTRAP=0
  65.  
  66. while test "X$1" != "X--"; do
  67.   case "$1" in
  68.     -l|--lib)
  69.        shift
  70.        LIB=`eval echo "$1"`
  71.        PATHS=
  72.        ;;
  73.     -f|--faked)
  74.        shift
  75.        FAKED="$1"
  76.        ;;
  77.     -i)
  78.        shift
  79.        if test -f "$1"; then
  80.          FAKEDOPTS=$FAKEDOPTS" --load"
  81.          PIPEIN="<$1"
  82.        else
  83.          stderr "database file \`$1' does not exist."
  84.        fi
  85.        ;;
  86.     -s)
  87.        shift
  88.        FAKEDOPTS=$FAKEDOPTS" --save-file $1"
  89.        [ -p $1 ] || WAITINTRAP=1
  90.        ;;
  91.     -u|--unknown-is-real)
  92.        FAKEDOPTS=$FAKEDOPTS" --unknown-is-real"
  93.        FAKED_MODE="unknown-is-real"
  94.        ;;
  95.     -b|--fd-base)
  96.        shift
  97.        FAKEROOT_FD_BASE="$1"
  98.        ;;
  99.     -v|--version)
  100.        echo "fakeroot version 1.12.4"
  101.        exit 0
  102.        ;;
  103.     -h|--help)
  104.        usage
  105.        ;;
  106.   esac
  107.   shift
  108. done
  109.  
  110. shift #get rid of the '--'
  111.  
  112. # make sure the preload is available
  113. ABSLIB=""
  114. if [ -n "$PATHS" ]
  115. then
  116.     for dir in `echo $PATHS | sed 's/:/ /g'`
  117.     do
  118.     if test -r "$dir/$LIB"
  119.     then
  120.         libfound=yes
  121.         ABSLIB="$dir/$LIB"
  122.     fi
  123.     done
  124. else
  125.     if test -r "$LIB"
  126.     then
  127.     libfound=yes
  128.     ABSLIB="$LIB"
  129.     fi
  130. fi
  131.  
  132. if test $libfound = no
  133. then
  134.     fatal "preload library \`$LIB' not found, aborting."
  135. fi
  136.  
  137. if test -n "$FAKEROOTKEY"
  138. then
  139.     fatal "FAKEROOTKEY set to $FAKEROOTKEY" \
  140.           "nested operation not yet supported"
  141. fi
  142.  
  143. unset FAKEROOTKEY
  144. KEY_PID=`eval $FAKED $FAKEDOPTS $PIPEIN`
  145. FAKEROOTKEY=`echo $KEY_PID|cut -d: -f1`
  146. PID=`echo $KEY_PID|cut -d: -f2`
  147.  
  148. if [ "$WAITINTRAP" -eq 0 ]; then
  149.   trap "kill -s TERM $PID" EXIT INT
  150. else
  151.   trap 'FAKEROOTKEY=$FAKEROOTKEY LD_LIBRARY_PATH="$PATHS"  LD_PRELOAD="$LIB" /bin/ls -l / >/dev/null 2>&1; while kill -s TERM $PID 2>/dev/null; do sleep 0.1; done' EXIT INT
  152. fi
  153.  
  154. if test -z "$FAKEROOTKEY" || test -z "$PID"; then
  155.   fatal "error while starting the \`faked' daemon."
  156. fi
  157.  
  158. if test $USEABSLIBPATH -ne 0 ; then
  159.   LIB=$ABSLIB
  160. fi
  161. # Keep other library paths
  162. if test -n "$LD_LIBRARY_PATH"; then
  163.   PATHS="$PATHS:$LD_LIBRARY_PATH"
  164. fi
  165. # ...and preloaded libs
  166. if test -n "$LD_PRELOAD"; then
  167.   LIB="$LIB $LD_PRELOAD"
  168. fi
  169.  
  170. export FAKEROOT_FD_BASE
  171.  
  172. if test -z "$*"; then
  173.   FAKEROOTKEY=$FAKEROOTKEY LD_LIBRARY_PATH="$PATHS"  LD_PRELOAD="$LIB" ${SHELL:-/bin/sh}
  174.   RESULT=$?
  175. else
  176.   FAKEROOTKEY=$FAKEROOTKEY LD_LIBRARY_PATH="$PATHS"  LD_PRELOAD="$LIB" "$@"
  177.   RESULT=$?
  178. fi
  179.  
  180. exit $RESULT
  181.  
  182. # Local Variables:
  183. # mode: shell-script
  184. # End:
  185.